home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / libs / tsipp / tsipp.lha / tsipp3.0a / demos / util.tcl < prev    next >
Encoding:
Text File  |  1992-11-02  |  3.5 KB  |  120 lines

  1. #==============================================================================
  2. #                                  util.tcl
  3. #------------------------------------------------------------------------------
  4. # Utility for parsing the command line and later rendering the current world
  5. # space according to the parsed parameters.
  6. #------------------------------------------------------------------------------
  7. # $Id: util.tcl,v 2.0 1992/11/02 03:55:25 markd Rel $
  8. #------------------------------------------------------------------------------
  9.  
  10. #
  11. # Print a series of lines to stderr and exit.
  12. #
  13. proc ArgError {args} {
  14.     foreach msg $args {
  15.         puts stderr msg
  16.     }
  17.     exit 1
  18. }
  19.  
  20. #
  21. # Print a usage error and exit.
  22. #
  23. proc Usage {msg} {
  24.     ArgError $msg {... [-mode mode] [-size size] [-oversample n] -ppm -rle}
  25. }
  26.  
  27. #
  28. # Procedure parse the arguments and saves them for rendering time.
  29. #
  30. # Arguments:
  31. #    o oversample - The oversampling value to use if not specified on command
  32. #      line.  (optional, default is 2)
  33. # Globals:
  34. #   G_mode - PHONG, GOURAUD, FLAG or LINE
  35. #   G_oversample - Oversampling factor.
  36. #   G_size - The size of image to render (size X size).
  37. #   G_rle - 1 if render to an RLE file, 0 if render to a PBM file.
  38. #   G_suffix - Suffix to use for rendering.
  39. #
  40. proc ParseArgs {{oversample 2}} {
  41.     global argv G_mode G_size G_oversample G_rle G_suffix
  42.     set G_mode PHONG
  43.     set G_size 256
  44.     set G_oversample $oversample
  45.     set G_rle [SippInfo rle]
  46.  
  47.     while {![lempty $argv]} {
  48.         set option [lvarpop argv]
  49.         case $option {
  50.             {-mode} {
  51.                 set G_mode [lvarpop argv]
  52.                 if {[lsearch {PHONG GOURAUD FLAG LINE} $G_mode] < 0} {
  53.                     ArgError "Invalid mode `$G_mode'" \
  54.                              "expected one of PHONG GOURAUD FLAG LINE"
  55.                 }
  56.             }
  57.             {-size} {
  58.                 set G_size [lvarpop argv]
  59.                 if {$G_size <= 0 || [catch {expr 0+$G_size}] != 0} {
  60.                     ArgError "Invalid size `$G_size'"
  61.                 }
  62.             }
  63.             {-oversample} {
  64.                 set G_oversample [lvarpop argv]
  65.                 if {$G_oversample <= 0 || ![ctype digit $G_oversample] } {
  66.                     ArgError "Invalid oversampling `$G_oversample'"
  67.                 }
  68.             }
  69.             {-ppm}  {
  70.                 set G_rle 0
  71.             }
  72.             {-rle}  {
  73.                 set G_rle 1
  74.             }
  75.             default {
  76.               Usage "Invalid option `$option'"
  77.             }
  78.         }
  79.     }
  80.     if $G_rle {
  81.         set G_suffix ".rle"
  82.     } else {
  83.         if {$G_mode == "LINE"} {
  84.             set G_suffix ".pbm"
  85.         } else {
  86.             set G_suffix ".ppm"
  87.         }
  88.     }
  89. }
  90.  
  91.  
  92. #
  93. # Do rendering based on the command line arguments that were parsed.
  94. # baseName is the name of the file to render, less extensions.  For RLE files,
  95. # Set a default image for viewing with getx11, since they were designed for
  96. # a ppm viewer.
  97. #
  98. proc DoRendering {baseName} {
  99.     global G_mode G_size G_oversample G_rle G_suffix
  100.  
  101.     set imfile_name "${baseName}${G_suffix}"
  102.  
  103.     puts stdout "Rendering $G_mode image to $imfile_name, wait..." nonewline
  104.     flush stdout
  105.  
  106.     if $G_rle {
  107.         set rle [SippRLEOpen $imfile_name "w"]
  108.         SippRLEPutCom $rle image_gamma 0.4
  109.         SippRLEPutCom $rle image_title $baseName
  110.         SippRLERender $rle $G_size $G_size $G_mode $G_oversample
  111.         SippRLEClose $rle
  112.     } else {
  113.         set fh [open $imfile_name "w"]
  114.         SippPPMRender $fh $G_size $G_size $G_mode $G_oversample
  115.         close $fh
  116.     }
  117.  
  118.     puts stdout "Done."
  119. }
  120.